﻿/*
  --============================================================================================
  --============================================================================================
  -- Fichier          :	BuilderCC.cs
  -- Objet			  :	Construction des compositions chimiques à partir d'un PV
  -- Auteur			  :	S. Le Gouellec
  -- Date de création : 07/2014
  --                              :
  --                              :
  -- Notes spéciales		  :
  -- Historique			  :
  ----------------------------------------------------------------------------------------------
  -- |     Code    |  Vers. |   Date   | Auteur	|                  Description
  -- |  Dem/inc/pr |  	    |          |        |         
  -- -------------------------------------------------------------------------------------------
  -- |             |   1.0  | 07/2014  |  SLE	| Création
  -- |	           |	    |	       |        |
  --============================================================================================
  --============================================================================================
*/

using ModelEntities.Adapter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ModelEntities.CompositionChimique
{
    /// <summary>
    /// Constructeur de Composition Chimique
    /// </summary>
    public class BuilderCC : IBuilder
    {
        /// <summary>
        /// Liste des compositions chimiques
        /// </summary>
        private List<IBuilt> list;

        /// <summary>
        /// Constructeur vide
        /// </summary>
        public BuilderCC()
        {
            list = new List<IBuilt>();
        }

        /// <summary>
        /// Construit une liste de compositions chimiques en prenant en paramètre un PV
        /// </summary>
        /// <param name="build">Entête PV, doit être du type MEntetePV, sinon le résultat est vide</param>
        public void BuildPart(object build)
        {
            // Création et remplissage de la liste
            MEntetePV pv = build as MEntetePV;
            if(pv == null)
                return ;

            List<MDetailsPV> resultat = pv.DetailsPV
                .Where(detail => detail.CodeInstruction.Equals("DC01"))
                .OrderBy(detail => detail.NoPage)
                .OrderBy(detail => Convert.ToInt16(detail.NoLigne))
                .ToList();

            foreach (MDetailsPV detail in resultat) 
            {
                string[] res = detail.LibelleInstruction.Split(new string[] { ";" }, StringSplitOptions.None);
                CompositionChimique cc = new CompositionChimique(Convert.ToInt32(detail.NoPage));
                cc.Objects(res.ToList<object>());
                list.Add(cc);
            }
        }

        /// <summary>
        /// Retourne le résultat de la création
        /// </summary>
        /// <returns></returns>
        public List<IBuilt> GetResult()
        {
            return list;
        }
    }
}
